package 商城进货交易记录程序设计;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.Scanner;

public class CopyFile implements INoperation{
    @Override
    public void workFIle() throws IOException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入原目录或文件：");
        String source = sc.nextLine();
        System.out.println("请输入目标目录：");
        String target = sc.nextLine();
        File Sourcefile = new File(source);
        File Targetfile = new File(target);

        if(!Sourcefile.exists())
        {
            System.out.println("源目录或文件不存在");
            return;
        }

        if(Sourcefile.isDirectory())
        {
            copyDirectory(Sourcefile, Targetfile);
            System.out.println("该目录已复制");
        }else {
            copyFile(Sourcefile, Targetfile);
            System.out.println("该文件已复制");
        }
    }

    //复制目录
    static void copyDirectory(File sourceDir, File targetDir) throws IOException {
        //判断目标目录是否存在
        if(!targetDir.exists())
        {
            targetDir.mkdir();
        }
        //将源目录下的目录/文件都拆分开
        File[] files = sourceDir.listFiles();
        if(files != null)
        {
            for(File file : files)
            {
                if(file.isDirectory())//如果是目录，需要将目录下的文件逐个存入
                {
                    //在目标目录的地址下创建File实例
                    File newTargetDir = new File(targetDir, file.getName());
                    copyDirectory(file, newTargetDir);
                }
                else{
                    copyFile(file, targetDir);
                }
            }
        }
    }

    //复制文件
    static void copyFile(File sourceFile, File targetDir) throws IOException {
        //判断目标地址是否存在
        if(!targetDir.exists())
        {
            targetDir.mkdir();
        }
        //依次按文件属性存入
        File targetFile = new File(targetDir, sourceFile.getName());
        Files.copy(sourceFile.toPath(), targetFile.toPath(), StandardCopyOption.COPY_ATTRIBUTES);
    }
}
